const { Worker } = require('worker_threads');

/**
 * 创建一个子线程去执行指定文件
 * @param {string} filename 文件路径
 * @param {object} options 可选项
 * @param {any[]} args 参数数组
 * @returns {Worker} 子线程对象
 */
function createWorker(filename, options = {}, ...args) {
    const worker = new Worker(`
    const { parentPort } = require('worker_threads');
    const { filename, args } = ${JSON.stringify({ filename, args })};

    // 加载指定文件
    const module = require(filename);

    // 执行指定函数
    if (typeof module === 'function') {
      module(...args);
    }

    // 发送消息通知父线程
    // parentPort.postMessage('build work success over!');
  `, { eval: true, ...options });

    // 监听消息
    worker.on('message', (message) => {
        console.log(`子线程输出：${message}`);
    });

    // 监听错误
    worker.on('error', (error) => {
        console.error(`子线程错误：${error}`);
    });

    return worker;
}

module.exports = createWorker;
